import 'dart:typed_data';
import 'message_base.dart';

// 私有指令基类
abstract class PrivateInstructionMessageBase<T extends MessageBase> {
  // SN - 用于Huari
  T getSnIntrMsg();

  // 产品模型 - 用于Huari
  T getProductModelIntrMsg();

  // 获取身份认证随机码
  T getAuthRandomCodeIntrMsg(Uint8List identifierBytes);

  // 验证身份认证随机码
  T verifyAuthRandomCodeIntrMsg(Uint8List bytes);

  // 锁车/解锁
  T lockIntrMsg(Uint8List identifyBytes, bool status);

  // 写入产品模型
  T writeProductModelIntrMsg(Uint8List model);

  // 写入激活时间
  T writeActivationTimeIntrMsg(Uint8List time);

  // 进入NFC配卡模式
  T enterNfcCardModeIntrMsg();

  // 退出NFC配卡模式
  T exitNfcCardModeIntrMsg();

  // 删除NFC卡
  T deleteNfcCardIntrMsg();

  // 添加主密钥
  T addMasterKeyIntrMsg(Uint8List bytes);

  // 删除主密钥
  T deleteMasterKeyIntrMsg(Uint8List bytes);

  // 添加子密钥
  T addSubKeyIntrMsg(Uint8List bytes);

  // 删除子密钥
  T deleteSubKeyIntrMsg(Uint8List bytes);

  // 获取钥匙列表
  T getKeyListIntrMsg(Uint8List bytes);

  // 设置rtc时间
  T setRtcTimeIntrMsg(DateTime time);

  // 设置待机时长
  T setStandbyTimeIntrMsg(int duration);

  // 设置骑行模式
  T setRideModeIntrMsg(int mode);

  // 开启周期数据开关
  T enablePeriodicDataSwitchIntrMsg(bool enable);

  // 读取控制器曲线
  T getControllerDataIntrMsg(Uint8List addrBytes);

  // 设置控制器曲线
  T setControllerDataIntrMsg(Uint8List addrBytes, Uint8List dataBytes);

  // 鸣笛
  T hornIntrMsg();

  // 播放指定音效
  T playSoundIntrMsg(int audioIndex, {bool? play = true});

  // 开灯/关灯
  T lightIntrMsg({required bool lowBeam, required bool highBeam});

  // 实时信息
  T getRealtimeInfoIntrMsg();

  // 实时状态
  T getRealtimeStatusIntrMsg();

  // 实时错误
  T getRealtimeErrorIntrMsg();

  // 综合实时信息
  T getRealtimeAllIntrMsg();

  // 电池实时信息
  T getRealtimeBatteryInfoIntrMsg();

  // 单次统计数据
  T getStatisticOnceIntrMsg({int? startNum, int? count});

  // 累计统计数据
  T getStatisticsTotalIntrMsg();

  // 综合设置
  T getSettingsAllIntrMsg();

  // 获取综合产品信息
  T getIntegratedProductInfoIntrMsg();

  // 获取综合实时信息
  T getIntegratedRealtimeInfoAllIntrMsg();

  // 设置周期数据上报间隔
  T setPeriodicDataReportingIntervalIntrMsg(int interval);

  // 车辆昵称
  T getVehicleNicknameIntrMsg();

  // 车辆密码
  T getVehiclePasswordIntrMsg();

  // 车辆昵称
  T setVehicleNicknameIntrMsg(Uint8List bytes);

  // 车辆密码
  T setVehiclePasswordIntrMsg(Uint8List bytes);

  // 设置限速
  T setSpeedLimitIntrMsg(int speed);

  // 设置警告速度
  T setWarningSpeedIntrMsg(int speed);

  // 设置骑行辅助开关
  T setRideAssistSwitchIntrMsg(bool enable);

  // 设置加、减速辅助百分比
  T setAccAndBrakeAssistPercentageIntrMsg(
      {required int accPercentage, required int brakePercentage});

  // 设置踏板灵敏度
  T setPedalSensitivityIntrMsg(int sensitivity1, int sensitivity2);

  // 设置平衡角度
  T setBalanceAngleIntrMsg(int angle);

  // 设置赛道倾斜角模式开关
  T setBermAngleModeSwitchIntrMsg(bool enable);

  // 设置防飞转开关
  T setSpinKillSwitchIntrMsg(bool enable);

  // 设置主声浪开关
  T setMainSoundSwitchIntrMsg(bool enable);

  // 设置语音开关
  T setVoiceSwitchIntrMsg(bool enable);

  // 设置音量大小
  T setVolumeIntrMsg(int volume);

  // 设置云盒低电唤醒车辆开关
  T setTBoxLowBatteryWakeupSwitchIntrMsg(bool enable);

  // 重启云盒
  T setTBoxRebootIntrMsg();

  // 设置屏幕TBOX信息显示开关
  T setTBoxScreenInfoDisplaySwitchIntrMsg(bool enable);

  // 运输模式开关
  T setTransportModeSwitchIntrMsg(bool enable);

  // 车辆较正
  /*
    uint8_t 启动/终止陀螺仪零点校准   1启动 0终止
    uint8_t 启动/终止俯仰角零点校准   1启动 0终止
    uint8_t 启动/终止翻滚角零点校准   1启动 0终止
  */
  T triggerVehicleCalibrationIntrMsg(
      {bool? gyroCalibrationEnabled,
      bool? pitchCalibrationEnabled,
      bool? rollCalibrationEnabled});

  // 负载检测
  T setLoadDetectionIntrMsg();

  // 空载检测
  T setNoLoadDetectionIntrMsg();

  // 自动大灯模式开关
  T setAutoHeadlightModeSwitchIntrMsg(bool enable);

  // 转向灯开关
  T setTurnSignalIntrMsg(bool leftSignal, bool rightSignal);

  // 低电骑行开关
  T setLowBatteryRideSwitchIntrMsg(bool enable);

  // 显示屏自动熄屏开关
  T setDisplayAutoOffSwitchIntrMsg(bool enable);

  // logo灯亮度调节
  T setLogoLightBrightnessIntrMsg(int brightness);

  // 日行灯开关
  T setDaytimeRunningLightSwitchIntrMsg(bool enable);

  // 显示屏进入升级状态
  T setDisplayEnterUpgradeStatusIntrMsg(bool enable);

  // 显示屏进入文件传输状态
  T setDisplayEnterFileTransferStatusIntrMsg(bool enable);

  // 获取搜索到的胎压传感器信息
  T getTirePressureSensorInfoIntrMsg();

  // 清除搜索到的胎压传感器信息
  T clearSearchedTirePressureSensorInfoIntrMsg();

  // 设置胎压低报警阈值
  T setTirePressureLowAlarmThresholdIntrMsg(int threshold);

  // 开启 电机自适应
  T startMotorAdaptationIntrMsg();

  // 关闭 电机自适应
  T stopMotorAdaptationIntrMsg();

  // 查询 电机自适应状态
  T getMotorAdaptationStatusIntrMsg();

  // 清除电机自适应数据
  T clearMotorAdaptationDataIntrMsg();

  // 开启电机自检 当method为null时，表示查询电机自检状态
  T startMotorSelfCheckIntrMsg({int? method = 1});

  // 开启电池电压校正
  T startBatteryVoltageCalibrationIntrMsg({bool? write = true});
}
